/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.tiberio.movil.activity;

import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.tiberio.movil.R;
import com.tiberio.movil.entity.BaseEntity;
import com.tiberio.movil.entity.EdificioEntity;
import com.tiberio.movil.entity.RecusoEntity;
import com.tiberio.movil.utility.EdificioUtility;
import java.util.ArrayList;

/**
 *
 * @author Chema
 */
public class Principal extends Actividad
{

    LinearLayout[] linearLayout = new LinearLayout[8];
    Button bRecogerTodo;
    Button bMostrarEjercito;
    
    BaseEntity infoBase;
    

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        try
        {
            inicializar(savedInstanceState, R.layout.principal);
            inicialiarLinerLayout();
            incializarBotones();

            //ArrayList<RecusoEntity> recursos = servicioHttp.getRecusos(0,0);

            //recuperar la info de la base
            infoBase = servicioHttp.getInfoBase();
            
            if(infoBase != null)
                añadirRecursos(infoBase.getRecusos());
            else
                 añadirRecursos(null);



            // introducimos edificios en los views
            añadirALayout(infoBase.getEdificios());
        }
        catch (Exception e)
        {
            mostrarExcepcion(e);
        }


    }

    //Metodo para inicializar todos
    private void inicialiarLinerLayout() {

        LinearLayout linearLayoutPadre = (LinearLayout) findViewById(R.id.lContenedor);

        for (int i = 0; i < 8; i++)
        {
            LinearLayout l = new LinearLayout(this);
            l.setOrientation(LinearLayout.HORIZONTAL);

            for (int j = 0; j < 9; j++)
            {
                Button b = new Button(this);
                b.setTextSize(4);
                b.setText("        ");
                b.setVisibility(View.INVISIBLE);
               
                b.setOnClickListener(new View.OnClickListener()
                {

                    public void onClick(View boton) 
                    {
                        mostrarAcciones(boton.getId());
                    }
                });
                l.addView(b);
            }
            linearLayout[i] = l;
            linearLayoutPadre.addView(l);
        }
    }

    private void añadirALayout(ArrayList<EdificioEntity> edificios)
    {
        for (EdificioEntity e : edificios)
        {
            int x = e.getPosX();
            int y = e.getPosY();
             Button b = null;
            try
            {
                b = (Button)linearLayout[y].getChildAt(x);
            }
            catch(Exception ex)
            {
                mostrarExcepcion(ex);
            }
            if(b != null)
            {
                b.setId(e.getId());
                b.setText(""+e.getId());
                b.setVisibility(View.VISIBLE);
            }
                
            
        }

    }

    
    //hacer con Context Menu, es mejor?
    private void mostrarAcciones(int id) 
    { 
        // recuperamos el edificio.
        EdificioEntity edifico = EdificioUtility.recuperarEdificio(id, infoBase.getEdificios());
         
        //set up dialog
        Dialog dialog = new Dialog(this);
        dialog.setContentView(R.layout.opciones);
        //TODO: mapear el nombre de la estructura.
        dialog.setTitle("Por favor, seleccione una opcion:");
        dialog.setCancelable(true);

        Button buttonReparar = (Button) dialog.findViewById(R.id.reparar);
        Button buttonMejorar = (Button) dialog.findViewById(R.id.mejorar);
        Button buttonRecoger = (Button) dialog.findViewById(R.id.recoger);

        /*
        //there are a lot of settings, for dialog, check them all out!

        //set up image view
        ImageView img = (ImageView) dialog.findViewById(R.id.ImageView01);
        img.setImageResource(R.drawable.nista_logo);

        //set up button
        Button button = (Button) dialog.findViewById(R.id.Button01);
        button.setOnClickListener(new OnClickListener() {
        @Override
            public void onClick(View v) {
                finish();
            }
        });
        //now that the dialog is set up, it's time to show it    */
        dialog.show();
        
        
    }

    private void añadirRecursos(ArrayList<RecusoEntity> recursos) 
    {
        if(recursos != null)
        {
            TextView tv ;
            for(RecusoEntity r : recursos)
            {
                switch(r.getTipo())
                {
                    case 1: 

                        tv = (TextView) findViewById(R.id.tiberio);
                        tv.setText(""+(int)r.getCantidad()+"  ");
                        break;

                    case 2:

                        tv = (TextView) findViewById(R.id.dinero);
                        tv.setText(""+(int)r.getCantidad()+"  ");
                        break;


                    case 5:

                        tv = (TextView) findViewById(R.id.cristal);
                        tv.setText(""+(int)r.getCantidad()+"  ");
                        break;

                    default:
                        break;
                }
             }
           }
        else
        {
             ((TextView) findViewById(R.id.tiberio)).setText("No se han recuperado los recursos");
             
        }
    }

    private void incializarBotones() 
    {
        bRecogerTodo = (Button)findViewById(R.id.bRecogerTodo);
        bMostrarEjercito = (Button)findViewById(R.id.bMostrarEjercito);
        
        bRecogerTodo.setOnClickListener(new View.OnClickListener() 
        {

            public void onClick(View arg0) 
            {
               recogerTodos();
            }

            
        });
        
        bMostrarEjercito.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) 
            {
                mostrarEjercito();
            }

            
        });
        
    }
    
    private void recogerTodos() 
    {
        ArrayList<RecusoEntity> recursos = null;
        try
        {
            if(infoBase != null && infoBase.getEdificios() != null)
            {
                for (EdificioEntity e : infoBase.getEdificios())
                {
                    if(e.getT() == 32 || e.getT() == 10 )
                    {
                        ArrayList<RecusoEntity> r = servicioHttp.recogerRecursos(e.getPosX(), e.getPosY());
                        if(r!= null)
                            recursos = r;
                    }
                    
                }
                
                if(recursos != null)
                    actualizarRecursos(recursos);
                else
                    //TODO: Mostrar error recuperar
                    ;
                    

            }
        }
        catch(Exception e)
        {
            mostrarExcepcion(e);
        }
    }

    private void actualizarRecursos(ArrayList<RecusoEntity> recursos) 
    {
        //TODO: actualizar recursos
    }
    
    private void mostrarEjercito() 
    {
        cambiarActividad(Principal.this, TipoActividad.EJERCITO);
    }
    
    
            
}
